Typical computing devices include general-purpose processor cores as well as programmable hardware accelerators such as graphics processing units, media processing cores, image processing engines, field-programmable gate arrays (FPGAs), and/or other specialized hardware devices. Programmable hardware accelerators may provide improved performance and/or power consumption for certain classes of computations. Programmable hardware accelerators are typically exposed to applications through heterogeneous programming language/runtimes such as OpenCL™ and RenderScript or through well-defined APIs such as OpenMAX™. However, most applications are programmed to target general-purpose processor cores and must be manually re-written to target a particular hardware accelerator.